"""
regex:一半观察 一半匹配
re模块基础函数示例
"""
import re

result = re.findall("\d+", "2021-4-30")
print(result)

# 1.普通字符 整体匹配
result = re.findall("大大大多大多", "202大大大多大多1-202大大大多4-30")
print(result)

# 2. 元字符
# | 或
result = re.findall("大大大|多大多", "202大大大多大多1-202大大大多4-30")
print(result)
result = re.findall("ab|bc|cd", "abcde")
print(result)  # 不取重叠的后者

# . 匹配单个任意字符(except '\n')
result = re.findall("大大大.", "202大大大多大多1-202大大大多4-3大大大少0 大大大\n(⊙o⊙)哦")
print(result)

# [字符集] 匹配单个任意字符∈字符集, 字符集也可写为区间形式(utf-8编码)\混合书写(习惯:零散字符在前,区间在后,无分隔)  数字 最大9-->单个字符
result = re.findall("[多少0-2]", "202大大大多大多1-202大大大多4-3大大大少0 大大大\n(⊙o⊙)哦")
print(result)
result = re.findall("[多少0-2]..", "202大大大多大多1-202大大大多4-3大大大少0 大大大\n(⊙o⊙)哦")
print(result)  # 不取重叠的后者

# [^字符集] 匹配单个任意字符∉字符集
result = re.findall("[^ ]..", "202大大大多大多1-202大大大多4-3大大大少0 大大大\n(⊙o⊙)哦")
print(result)  # 不取重叠的后者

# 正则表达式的灵魂:匹配重复 -->不要组合出可无的规则,如-?[0-1]*, 可用-?[0-9]+
# * 匹配前字符出现>=0次
result = re.findall("[0-9]大*", "202大大大多大多1-202大大大多4-3大大大少0 大大大\n(⊙o⊙)哦")
print(result)  # 不取重叠的后者

# + 匹配前字符出现>0次
result = re.findall("[0-9]大+", "202大大大多大多1-202大大大多4-3大大大少0 大大大\n(⊙o⊙)哦")
print(result)  # 不取重叠的后者
result = re.findall("[0-9]+", "今天是:2021-4-30")
print(result)  # 不取重叠的后者

# ? 匹配前字符出现0/1次
result = re.findall("[0-9]大?", "202大大大多大多1-202大大大多4-3大大大少0 大大大\n(⊙o⊙)哦")
print(result)  # 不取重叠的后者
result = re.findall("-?[0-9]+", "-200°的天气,宇宙战士负重15T")
print(result)  # 不取重叠的后者

# {n} 匹配前字符重复指定n次,少于指定次数则不要
result = re.findall("[0-9]大{3}", "202大大大多大多1-202大大大多4-3大大大大大少0 1大大\n(⊙o⊙)哦")
print(result)  # 不取重叠的后者
result = re.findall("1[3-9][0-9]{9}", "王总:13838384386")
print(result)  # 不取重叠的后者

# {m,n} 匹配前字符重复m~n次,少于指定次数则不要,优先高次数
result = re.findall("[0-9]大{0,3}", "202大大大多大多1-202大大大多4-3大大大大大少0 1大大\n(⊙o⊙)哦")
print(result)  # 不取重叠的后者
result = re.findall("[0-9]大{,3}", "202大大大多大多1-202大大大多4-3大大大大大少0 1大大\n(⊙o⊙)哦")
print(result)  # 不取重叠的后者
result = re.findall("[0-9]大{0,}", "202大大大多大多1-202大大大多4-3大大大大大少0 1大大\n(⊙o⊙)哦")
print(result)  # 不取重叠的后者

# ^ 在目标字符串开头位置 匹配后字符串?
result = re.findall("^202", "202大大大多大多1-202大大大多4-3大大大大大少0 1大大\n(⊙o⊙)哦")
print(result)  # 不取重叠的后者
result = re.findall("^哦", "202大大大多大多1-202大大大多4-3大大大大大少0 1大大\n(⊙o⊙)哦")
print(result)  # 不取重叠的后者

# $ 在目标字符串结尾位置 匹配前字符串?
result = re.findall("202$", "202大大大多大多1-202大大大多4-3大大大大大少0 1大大\n(⊙o⊙)哦")
print(result)  # 不取重叠的后者
result = re.findall("哦$", "202大大大多大多1-202大大大多4-3大大大大大少0 1大大\n(⊙o⊙)哦")
print(result)  # 不取重叠的后者

# \d == [0-9]
result = re.findall("\d", "202大大大多大多1-202大大大多4-3大大大大大少0 1大大\n(⊙o⊙)哦")
print(result)  # 不取重叠的后者

# \D == [^0-9]
result = re.findall("\D", "202大大大多大多1-202大大大多4-3大大大大大少0 1大大\n(⊙o⊙)哦")
print(result)  # 不取重叠的后者

# \w == 普通字符
result = re.findall("\w+", "202大大大多大多1-202大大 大多4-3大大,大大:大少0 1大大\n(⊙o⊙)哦")
print(result)  # 不取重叠的后者

# \W == 非普通字符
result = re.findall("\W+", "202大大大多大多1-202大大 大多4-3大大,大大:大少0 1大大\n(⊙o⊙)哦")
print(result)  # 不取重叠的后者
